<?php
	/* 
		Funkční rozhraní k DB
		autor: klusik@klusik.cz
	*/
	
	/*
		Verze 0.1.7
			*	Kontroluje (na základní úrovni) validitu vyplněných mailů!
			
		Verze 0.1.6
			*	Zobrazí články od daného autora (po kliknutí na ID autora u příspěvku)
			
		Verze 0.1.5
			*	Umí zobrazit autora (odkaz zatím není funkční)
			
		Verze 0.1.4
			*	Pro změnu hesla se musí napsat dvakrát pro kontrolu a nemusí se zadávat původní :-)
			
		Verze 0.1.3.2
			*	Bugfixing: Špatně se zobrazoval čas, už se zobrazuje správně (nebyly nuly u minut)
			
		Verze 0.1.3.1
			*	Bugfixing: Špatná logika v zobrazení tlačítka skrýt, objevovalo se když byl počet článků > 10, ale nerespektovalo to počet zobrazených a současně i publikovaných článků
			
		Verze 0.1.3
			*	Tlačítko zobrazit/sbalit vše v příspěvcích ;)
			
		Verze 0.1.2
			*	Schopna upravit uživatele administrátorem
			 
		Verze 0.1.1
			*	Schopna mazat uživatele			
	*/
	
	/* TODO
	
		* Urgentní
		
		* Míň urgentní
			*	Stránkování uživatelů a článků v admin zóně
			*	Implementace TinyMCE do funkcí
			*	JS gallery
		
		* Tralala
			*	Přeformátování výstupu (nahražení textů s entery na <p>text</p>, odstranění všech <br> v textu -- možná zařídí TinyMCE, takže to zatím nechám...

	*/


	/* Obecné systémové funkce */
	
	/* Tato stránka */
	function tatoStranka()
	{
		return $_SERVER["PHP_SELF"];
	}
		
	/* Tuta funkce se připojí (pokusí připojit) k databázi. */
	function pripojitKDatabazi()
	{
		/* Natáhnutí konfigurace */
		require "sql_nastaveni.php";
		
		/* Kontrola konfigurace (alespoň základní)
			Zkontroluje se, jestli jsou proměnné vůbec nastaveny a pokud ano, tak jestli pokud jsou vyplněny...		
		*/
		if (!isset($uzivatel) || !isset($databaze) || !isset($heslo) || !isset($server) || empty($server) || empty($uzivatel) || empty($heslo) || empty($databaze))
		{
			/* Pokud je neco spatně, vrátí logickou nulu */
			return(false);
		}
		else 
		{
			/* Pokud projde kontrolou, pokusí se tedy připojit k databázi s nastavenými parametry */
			if ($pripojeni = mysql_connect($server, $uzivatel, $heslo))
			{
				/* Pokud se podaří připojijt k serveru, vybereme DB... */
				if (mysql_select_db($databaze))
				{
					/* Nastavíme kódování */
					mysql_query("SET CHARACTER SET utf8");
					
					/* Pokud se podaří připojit a vybrat aktivní databázi, můžeme to prohlásit za úspěch... */
					return(true);
				}
				else return(false); /* Jinak je to prostě neúspěch */
			}
			else return(false); /* Tuto je taky neúspěch */
		}
		
	}
	
	/* Tuta funkce zobrazí nickname přihlášeného uživatele, případně že je nepřihlášený */
	function zobrazPrihlasenehoUzivatele()
	{
		if (isset($_SESSION["uzivatel"]) && $_SESSION["uzivatel"] != "") return $_SESSION["uzivatel"]; else return "Nepřihlášený";
	}
	
	/* Vrátí true, pokud je uživatel přihlášen, jinak false */
	function jePrihlasen()
	{
		if (isset($_SESSION["prihlasen"]) && $_SESSION["prihlasen"] == true) return true; else return false;
	}
	
	/* Vrátí true, pokud je uživatel admin */
	function jeAdmin()
	{
		if ($_SESSION["administrator"] == true) return true; else return false;
	}
	
	/* Vrátí true, pokud je uživatel editor (může psát články) */
	function jeEditor()
	{
		if ($_SESSION["upravy"] == true) return true; else return false;
	}
	
	/* Zobrazí tlačítko odhlášení */
	function tlacitkoOdhlaseni()
	{
		$tutaStranka = $_SERVER["PHP_SELF"];
		
		$tlacitko = "<a href='$tutaStranka?logoff=1'><input type='submit' value='Odhlásit'></a>";
		
		return $tlacitko;
	}	
	
	/* Vrátí počet uživatelů */
	function pocetUzivatelu()
	{
		$sqlPocet = "SELECT COUNT(id) AS pocet FROM uzivatele";
		$pocet = mysql_fetch_array(mysql_query($sqlPocet));
		
		return $pocet["pocet"];
	}
	
	/* Tabulka správy uživatele */
	function administraceUzivatelu()
	{
		/* Tabulka se začne vykreslovat, jen pokud existuje alespoň jeden uživatel :-) (by byla pak tabulka naprd, žejo...) */
		if (pocetUzivatelu() > 0)
		{
			$nadpisTabulky = "Správa uživatelů";
			$tutaStranka = tatoStranka();
			
			$seznamUzivateluDotaz = "SELECT uzivatele.id, uzivatele.nick, uzivatele.jmeno, uzivatele.prijmeni, opravneni.administrator AS admin, opravneni.upravy AS upravy  FROM uzivatele, uzivatele_opravneni, opravneni WHERE uzivatele.id = uzivatele_opravneni.uzivatele_id AND opravneni.id = uzivatele_opravneni.opravneni_id AND smazany=0 ORDER BY prijmeni ASC, jmeno ASC";
			
			$uzivatele = mysql_query($seznamUzivateluDotaz);
			
			$formular = "<table><caption>$nadpisTabulky</caption>";
			$formular .= "<tr><th>ID</th><th>Nick</th><th>Jméno</th><th>Příjmení</th><th>E</th><th>A</th><th>Akce</th></tr>";
			
			while($uzivatel = mysql_fetch_array($uzivatele))
			{
				/* Pro zjednodušení dalšího zadávání... */
				$idUzivatele = $uzivatel["id"];
				
				$formular .= "<tr>";
					$formular .= "<td>".$uzivatel["id"]."</td>";
					$formular .= "<td>".$uzivatel["nick"]."</td>";
					$formular .= "<td>".$uzivatel["jmeno"]."</td>";
					$formular .= "<td>".$uzivatel["prijmeni"]."</td>";
					$formular .= "<td>".$uzivatel["upravy"]."</td>";
					$formular .= "<td>".$uzivatel["admin"]."</td>";
					$formular .= "<td><a href='$tutaStranka?upravitUzivatele=$idUzivatele'>Upravit</a> | <a href='$tutaStranka?smazatUzivatele=$idUzivatele'>Smazat</a></td>";					
				$formular .= "</tr>";
			}
			$formular .= "</table>";
			
			return $formular;
		}
		else
		{
			return null;
		}
	}
	
	/* Zjistí, jestli někdo chce editovat uživatele */
	function zjistiEditovatelnostUzivatele()
	{
		if (isset($_GET["upravitUzivatele"]) && $_GET["upravitUzivatele"] > 0)
		{
			return true;
		}
		return false;
	}
	
	/* Porovná oprávnění, jestli se ve vybraných nachází zaškrtnuté */
	function porovnejOpravneni($puvodni, $zaskrtnute)
	{
		foreach ($puvodni as $kontrolni)
		{
			if ($kontrolni == $zaskrtnute) return true;
		}
		return false;
	}
	
	/* Přidá formulář na přidání a úpravu uživatele */	
	function formularPridatUzivatele($edit = false, $idUzivatele = 0)
	{
		/* Nastavení */
		
		$tutaStranka = $_SERVER["PHP_SELF"];
		$nadpisFormulare = ($edit ? "Úprava člena": "Vložení člena");	
		$napisTlacitka = ($edit ? "Úprava uživatele" : "Vložit uživatele");
		
		/* Přednačtení hodnot pro editaci */
		if ($edit)
		{
			$sql_uzivatel = "SELECT uzivatele.nick, uzivatele.jmeno, uzivatele.prijmeni, uzivatele.email FROM uzivatele WHERE uzivatele.id=$idUzivatele";
			$uzivatel = mysql_fetch_array(mysql_query($sql_uzivatel));			
			
			$sql_opravneni = "SELECT opravneni.id FROM uzivatele, opravneni, uzivatele_opravneni WHERE uzivatele.id = uzivatele_opravneni.uzivatele_id AND opravneni.id = uzivatele_opravneni.opravneni_id AND uzivatele.id=$idUzivatele";
			$data_opravneni = mysql_query($sql_opravneni);
			$opravneniPuvodni = array();
			while($polozky_opravneni = mysql_fetch_array($data_opravneni))
			{
				$opravneniPuvodni[] = $polozky_opravneni["id"];
			}			
		}
			
		/* Vlastní formulář */		
		$formular = ($edit ? "Pro změnu hesla uživatele heslo vyplňte, jinak nechte prázdné." :null)."<table><caption>$nadpisFormulare</caption><form action='$tutaStranka' method='post'>";
				
		$formular .= "<tr><td>Nick uživatele</td><td><input type='text' name='nick' value='".($edit ? $uzivatel["nick"]: null)."'></td></tr>";
		
		if ($edit)
		{
			$formular .= "<tr><td>Nové heslo</td><td><input type='password' name='noveHeslo' value=''></td></tr>";
			$formular .= "<tr><td>Nové heslo (kontrola)</td><td><input type='password' name='noveHeslo2' value=''></td></tr>";
		}
		else
		{
			$formular .= "<tr><td>Heslo uživatele</td><td><input type='password' name='heslo' value=''></td></tr>";
		}
		$formular .= "<tr><td>Jméno uživatele</td><td><input type='text' name='jmeno' value='".($edit ? $uzivatel["jmeno"]: null)."'></td></tr>";
		$formular .= "<tr><td>Příjmení uživatele</td><td><input type='text' name='prijmeni' value='".($edit ? $uzivatel["prijmeni"]: null)."'></td></tr>";
		$formular .= "<tr><td>Email uživatele</td><td><input type='text' name='email' value='".($edit ? $uzivatel["email"]: null)."'></td></tr>";
		
		/* Výpis oprávnění */
		$sql_opravneni = "SELECT nazev, id FROM opravneni ORDER BY administrator ASC, upravy ASC";
		$data_opravneni = mysql_query($sql_opravneni);
		
		
		/* Projdeme všechna oprávnění */
		while($opravneni = mysql_fetch_array($data_opravneni))
		{
			$formular .= "<tr><td>".$opravneni["nazev"]."</td><td><input type='radio' name='opravneni' value='".$opravneni["id"]."' ".($edit ? (porovnejOpravneni($opravneniPuvodni, $opravneni["id"]) ? "checked=on" : null):null).")'></td></tr>";
		}
		
		/* Nu a nakonec vkládací tlačítko */
		$formular .= "<tr><td colspan=2 style='text-align: right;'><input type='hidden' name='".($edit ? "upravitUzivatele" : "pridatUzivatele")."' value=1>".($edit ? "<input type='hidden' name='id' value='$idUzivatele'>":null)."<input type='submit' value='$napisTlacitka'></td></tr>";
		
		$formular .= "</form></table>";
		
		return $formular;
	}
	
	
	/* Zobrazí informační panel
	
		To je panel, kde se zobrazují informace jako "Přihlášení v pořádku" nebo "Zadali jste špatné heslo" nebo "Příspěvek vložen" atd. */
	function zobrazInformacniPanel($stav)
	{
		/* Nejdříve nastavení */
		$barvaTextuOK 			= "#000";
		$barvaTextuFail		= "#000";
		$barvaPozadiOK			= "#afa";
		$barvaRameckuOK		= "#0f0";
		$barvaPozadiFail		= "#faa";
		$barvaRameckuFail		= "#f00";
		
		
		
		$panel = "";
		/* Vlastní panel */
		
		/* 
			Celý panel pracuje s polem $stav[] (případně $_GET["stav"] nebo $_POST["stav"] -- obecně tedy $_REQUEST["stav"]), 
			do kterého ukládám, jestli se akce zadařila (podle toho rozhodnu, 
			jakej panel použít) či ne a pak taky, během jaké akce je panel potřeba vytáhnout (login atd.) a podle
			toho se zobrazí korespondující text.
		*/
		
		
		/* Jestli je vůbec panel nastaven k zobrazení */
		if (isset($stav))
		{
			if ($stav["ok"])
			{
				/* Zobrazíme OK rámeček */
				$panel = "<div id='informacni_panel' style='color: $barvaTextuOK; background-color: $barvaPozadiOK; border: 1px solid $barvaRameckuOK'>";
			}
			else
			{
				/* Zobrazíme fail rámeček */
				$panel = "<div id='informacni_panel' style='color: $barvaTextuFail; background-color: $barvaPozadiFail; border: 1px solid $barvaRameckuFail'>";
			}
			
			/* Informace uvnitř panelu */
			
			switch($stav["akce"])
			{
				case "login":
					{
						$panel .= "Přihlášení bylo ";
						break;
					}
				case "pridaniClanku":
					{
						$panel .= "Vložení článku bylo ";
						break;
					}
				case "logoff":
					{
						$panel .= "Odhlášení ze systému bylo ";
						break;
					}
				case "autorizace":
					{
						$panel .= "Pro tuto akci nemáte dostatečné oprávnění. Kontaktujte administrátora. Vložení je ";
						break;
					}
				case "vkladaniPrazdne":
					{
						$panel .= "Musíte vyplnit všechna pole. Vkládání bylo ";
						break;
					}
				case "vlozeniPrispevku":
					{
						$panel .= "Vložení příspěvku bylo ";
						break;
					}
				case "vlozitUzivatele":
					{
						$panel .= "Vložení uživatele bylo ";
						break;
					}
				case "upravitUzivatele":
					{
						$panel .= "Upravení uživatele bylo ";
						break;
					}
				case "heslaSeNeshoduji":
					{
						$panel .= "Zadané heslo se s kontrolním neshoduje. Změnení hesla bylo ";
						break;
					}
				case "zmenaHesla":
					{
						$panel .= "Změnění hesla bylo ";
						break;
					}
				case "publikujClanek":
					{
						$panel .= "Publikování či skrytí článku bylo ";
						break;
					}
				case "smazatUzivatele":
					{
						$panel .= "Smazání uživatele bylo ";
						break;
					}
			}
			
			if ($stav["ok"]) 
			{
				$panel .= "úspěšné."; 
			}
			else 
			{
				$panel .= "neúspěšné.";
			}

			/* Uzavřetí panelu */
			$panel .= "</div>";
			
			/* Vrátíme panýlek */
			return $panel;
		}
		
		/* Pokud nic nevykreslujeme, nic nevracíme */
		return false;
	}
	
	/* Zobrazí login formulář */
	function formularLogin()
	{
		/* Nastavení formuláře (můžeš změnit jak uznáš za vhodné) */
		
		$tatoStranka 			= $_SERVER["PHP_SELF"];
		$nadpisTabulky 		= "Přihlášení uživatele"; 	/* Upraví caption formuláře */
		$uzivatelskeJmeno		= "Uživatelské jméno";
		$hesloUzivatele		= "Heslo uživatele";
		$prihlasit				= "Přihlásit uživatele";

		/* Začátek formuláře */
		$formular = "<table><caption>$nadpisTabulky</caption><form action='$tatoStranka' method='post'>";
		
		$formular .= "<tr><td>$uzivatelskeJmeno</td><td><input type='text' name='uzivatel'></td></tr>";
		$formular .= "<tr><td>$hesloUzivatele</td><td><input type='password' name='heslo'></td></tr>";
		
		$formular .= "<tr><td colspan='2' style='text-align: right;'><input type='hidden' name='prihlasUzivatele' value='1'><input type='submit' value='$prihlasit'></td></tr>";
		
		/* Konec formuláře */
		$formular .= "</form></table>";
		
		return $formular;
	}
	
	/* Formulář na změnu hesla */
	function formularZmenaHesla()
	{
		$nadpisFormulare = "Změna hesla přihlášeného uživatele";
		$tlacitko = "Změnit heslo";
		
		$tutaStranka = $_SERVER["PHP_SELF"];
		
		$formular  = 	"<table><caption>$nadpisFormulare</caption><form action='$tutaStranka' method='post'>";
		$formular .= 	"<tr><td>Původní heslo</td><td><input type='password' name='puvodniHeslo'></td></tr>";
		$formular .= 	"<tr><td>Nové heslo</td><td><input type='password' name='noveHeslo[1]'></td></tr>";
		$formular .= 	"<tr><td>Nové heslo (pro kokontrolu)</td><td><input type='password' name='noveHeslo[2]'></td></tr>";
		$formular .=	"<tr><td colspan=2 style='text-align: right;'><input type='hidden' name='zmenaVlastnihoHesla' value=1><input type='submit' value='$tlacitko'></td></tr>";
		
		$formular .= 	"</form></table>";
		
		return $formular;
		
	}
	
	/* Zkontroluje validitu emailu */
	/* Neřeší složitější věci, prostě pouze základní ověření textu emailové adresy */
	function emailJeValidni($email)
	{
		/* Zkontroluje, jestli obsahuje jeden zavináč a alespoň jeden znak před ním a maximálně 64 před, potom alespoň jeden znak za a maximálně 255 */
		if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) return false; 
		
		/* Rozsekáme mail na dvě části (podle zavináče, tedy na část před a po */
		$rozsekane = explode('@', $email);
		
		/* To před zavináčem rozsekáme podle teček */
		$podleTecek = explode('.', $rozsekane[0]);
		
		/* Zkontrolujeme každou část na validní znaky */
		for ($i = 0; $i < sizeof($podleTecek); $i++) 
		{
			if (!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&↪'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$",$podleTecek[$i])) 
			{
				/* Pokud nesplňuje, vrátíme neúspěch */
		      return false;
    		}
  		}
  		
  		/* Doména může být IP nebo doménové jméno, musíme zjistit co to je, žejo :-) */
		if (!ereg("^\[?[0-9\.]+\]?$", $rozsekane[1])) 
		{
			/* Pokud nesplňuje pravidlo pro IP */			
		   $domenaPodleTecek = explode(".", $rozsekane[1]);
		   
		   /* Pokud má méně než dvě části */
		   if (sizeof($domenaPodleTecek) < 2) return false;
		    
		   /* Zjistíme, jestli doménové jméno má validní znaky */
		   for ($i = 0; $i < sizeof($domenaPodleTecek); $i++) 
		   {
		   	/* Pokud obsahuje něco nepovoleného, je to chyba */
				if (!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|↪([A-Za-z0-9]+))$", $domenaPodleTecek[$i])) return false;		      
		   }
		 }  		
  		
  		/* Prošlo to vším, takže to vypadá na správnou emailovou adresu */
		return true;
	}

	/* Pokud je proveden pokus o přihlášení */
	function zkousiSeZalogovat($login)
	{
		if ($login == 1) return true; else return false;
	}
	
	/* Tato funkce se odhlásí z DB */
	function odpojitDatabazi()
	{
		mysql_close(); /* Tuto je triviální, no :-D */
	}
	
	/* Orezani textu na N znaků */
	function orezat($text, $n)
	{
		if (strlen($text)<=$n) return $text; /* Pokud není co řezat, nic neřežeme */
		else 
		{
			$rozdeleno = explode(" ", $text); /* Rozsekáme vstupní text podle mezer (prostě na slova) */

			$orezano = ""; /* Nastavíme prázdný text */
			$i = 0; /* Nastavíme nulový počítadlo */
			
			while (strlen($orezano) < $n) /* Dokud není délka sestaveného textu delší, než ořezání které požadujeme... */
			{
				if ($i > 0) $orezano .= " "; /* Pokud je $i větší nule; tedy pokud se nejedná o první slovo, dáme před slovo mezeru */
				$orezano .= $rozdeleno[$i++]; /* do $orezano přidáme další slovo a posuneme počítadlo $i */
			} 
			$orezano .= "..."; /* Za zkrácený text dáme trojtečku */
			
			return $orezano; /* A výsledek našeho snažení vrátíme */
		}
		
	}
	

	/* ----------------------------------------------------------------------------------- */
	
	/* Práce s články */

	/* Zobrazí titulek článku s id $id */
	function zobrazTitulek($id)
	{
		/* Přečtení titulku z DB */
		$sql_titulek = "SELECT titulek FROM clanky WHERE id = $id";		
		$titulek = mysql_fetch_array(mysql_query($sql_titulek));
		
		/* Pokud je titulek načten, funkce ho vrátí, pokud není, funkce vrátí false (pak se dá dobře testovat na úspěch) */
		if (!empty($titulek)) return $titulek["titulek"]; else return false; 
	}

	/* Zobrazí perex článku s id $id */
	function zobrazPerex($id)
	{
		/* Přečtení perexu z DB */
		$sql_perex = "SELECT perex FROM clanky WHERE id = $id";		
		$perex = mysql_fetch_array(mysql_query($sql_perex));
		
		/* Pokud je perex načten, funkce ho vrátí, pokud není, funkce vrátí false (pak se dá dobře testovat na úspěch) */
		if (!empty($perex)) return $perex["perex"]; else return false; 
	}

	/* Zobrazí text článku s id $id */
	function zobrazText($id)
	{
		/* Přečtení textu z DB */
		$sql_text = "SELECT text FROM clanky WHERE id = $id";		
		$text = mysql_fetch_array(mysql_query($sql_text));
		
		/* Pokud je text načten, funkce ho vrátí, pokud není, funkce vrátí false (pak se dá dobře testovat na úspěch) */
		if (!empty($text)) return $text["text"]; else return false; 
	}
	
	/* Zobrazí datum stvoření článku s id $id */
	function zobrazDatum($id)
	{
		$sql_datum = "SELECT YEAR(vytvoreno) AS rok, MONTH(vytvoreno) AS mesic, DAY(vytvoreno) AS den, MINUTE(vytvoreno) AS minuta, SECOND(vytvoreno) AS sekunda, HOUR(vytvoreno) AS hodina FROM clanky WHERE id = $id";
		
		$datum = mysql_fetch_array(mysql_query($sql_datum));
		
		$zobrazit = sprintf("%d. %d. %d %d.%02d", $datum["den"], $datum["mesic"], $datum["rok"], $datum["hodina"], $datum["minuta"]);
		return $zobrazit;
	}
	
	/* Zobrazení autora */
	function zobrazAutora($id)
	{		
		$sql_autor = "SELECT uzivatele.nick, uzivatele.jmeno, uzivatele.prijmeni, uzivatele.id AS id FROM uzivatele, clanky WHERE clanky.id=$id AND clanky.uzivatele_id = uzivatele.id";
		
		$autor = mysql_fetch_array(mysql_query($sql_autor));
		
		$zobrazit = sprintf("%s %s (%s)", $autor["jmeno"], $autor["prijmeni"], $autor["nick"]);
		return $zobrazit;
	}
	
	/* Vygeneruje odkaz na autora */
	function odkazNaAutora($id_clanku, $text)
	{
		$tutaStranka = tatoStranka();
		
		$sql_autor = "SELECT uzivatele.id AS id FROM uzivatele, clanky WHERE clanky.id=$id_clanku AND clanky.uzivatele_id = uzivatele.id";
		$autor = mysql_fetch_array(mysql_query($sql_autor));
		
		$zobrazit = "<a href='$tutaStranka?zobrazClankyOd=".$autor["id"]."'>".$text."</a>";
		return $zobrazit;
	}
	
	/* Zobrazí případně tlačítko */
	function zobrazitTlacitkoVsechnyClanky($publikovano = false, $vsechny = 0)
	{
		if ($vsechny == 0)
		{
			/* Jen pokud je počet článků větší 10 */
			$sql_pocetClanku = "SELECT COUNT(id) AS pocet FROM clanky ".($publikovano ? null: "WHERE publikovano = 1");
			$pocetClanku = mysql_fetch_array(mysql_query($sql_pocetClanku));
			
			if ($pocetClanku["pocet"] > 10)
			{
				$tlacitko = "<a href='$tutaStranka?zobrazitVsechny=1'><input type='submit' value='Zobrazit všechny články'></a>";
				return $tlacitko;
			}
			else return null;
		}		
		else
		{
			$tlacitko = "<a href='$tutaStranka?zobrazitVsechny=0'><input type='submit' value='Sbalit'></a>";
			return $tlacitko;
		} 
		
		return null;
		
	}
		
	/* Vrátí přehled všech článků (v ukázkovém index.php je ukázáno, jak je zobrazit) */
	function seznamClanku($publikovano = false, $jenNejnovejsi = false)
	{		
		/* Vrátí všechny publikované články v sestupném pořadí podle data stvoření */
		/* Pokud je dán (getem) požadavek na zobrazení článků pouze od jednoho autora, je to vyřešeno též */
		$sql_vsechny = "SELECT id FROM clanky ";
		
		if ($publikovano || isset($_GET["zobrazClankyOd"]))
		{
			$sql_vsechny .= " WHERE 1 ";
			
			if ($publikovano) $sql_vsechny .= " AND publikovano=1 ";
			if (isset($_GET["zobrazClankyOd"])) $sql_vsechny .= " AND uzivatele_id = ".$_GET["zobrazClankyOd"]." ";
			
		}
		
		$sql_vsechny .= " ORDER BY vytvoreno DESC ".($jenNejnovejsi ? null:"LIMIT 10");
		
		
		$data_vsechny = mysql_query($sql_vsechny);

		/* Clanky budou v poli */		
		$vsechny = array();
		
		/* Projdeme vsechny vracene clanky a narveme je do pole */
		while ($clanek = mysql_fetch_array($data_vsechny))
		{
			$vsechny[] = $clanek["id"];
		}
		
		/* Vratime pole s idčky vsech clanku */
		return $vsechny;
	}
	
	/* Vrátí true, pokud je prázdný, jinak false */
	function prazdny($text)
	{
		if ($text == "") return true; 
		
		return false;
	}
	
	/* Vytvoří odkaz pro úpravu článku */
	function upravitClanek($id)
	{
		$odkaz = tatoStranka();
		$odkaz .= "?upravitClanek=1&amp;id_clanku=$id";
		
		return $odkaz;
	}
	
	/* Vytvoří odkaz pro přepnutí publikování  */
	function publikovatClanek($id)
	{
		$odkaz = tatoStranka();
		
		/* nastaví, aby se publikovalo, pokud je nepublikované a opačně */
		
		if (stavPublikovani($id)) $publikovat = 0; else $publikovat = 1;		
		
		$odkaz .= "?publikovatClanek=$publikovat&amp;id_clanku=$id";
		
		return $odkaz;
	}
	
	/* Vrátí stav publikování */
	function stavPublikovani($id)
	{
		$zjistiStavPublikovani = "SELECT publikovano FROM clanky WHERE id = $id";
		$stavPublikovani = mysql_fetch_array(mysql_query($zjistiStavPublikovani));
		
		return $stavPublikovani["publikovano"];
	}
	
	/* Vrází "Publikovat", pokud je článek nepublikovaný a "Skrýt", pokud je publikovaný */
	function zobrazPublikovatelnost($id)
	{		
		if (stavPublikovani($id) == 1) return "skrýt"; else return "publikovat";
	}
	
	/* Vrátí tabulku článků s tlačítkem editovat a "odpublikovat" */
	function administraceClanku()
	{
		/* Nastavení popisků */
		$nadpisFormulare = "Administrace článků";
		
		$tatoStranka = tatoStranka();
		
		/* Formulář se zobrazí jen když bude systém obsahovat nějaké články */
		if (pocetClanku() > 0)
		{
			/* Vrácení článků */
			$clanky = seznamClanku(true); /* Přepínač (true) způsobí, že se vrátí i nepublikované články */
			
			/* Vlastní formulář */
			$formular  = "<table><caption>$nadpisFormulare</caption><form action='$tatoStranka' method='post'>";
			
			$formular .= "<tr><th>Titulek</th><th>Stvořeno</th><th>E</th><th>P</th></tr>";
			
			/* Zobrazení jednotlivých řádků */
			foreach ($clanky as $id_clanku)
			{
				$formular .= "<tr><td>".orezat(zobrazTitulek($id_clanku),40)."</td><td>".zobrazDatum($id_clanku)."</td><td><a href='".upravitClanek($id_clanku)."'>Upravit</a></td><td><a href='".publikovatClanek($id_clanku)."'>".zobrazPublikovatelnost($id_clanku)."</a></td></tr>";
			}
			
			
			$formular .= "</form></table>";
			
			return $formular;	
		}
		else 
		{
			return "Neexistují články, které by se daly editovat.";
		}
	}
	
	/* Vrátí počet článků (příspěvků) */
	/* Pokud se funkce zavolá s parametrem (true), vrátí počet jen publikovaných */
	function pocetClanku($publikovano = false)
	{
		$sql_pocet = "SELECT COUNT(titulek) AS pocet FROM clanky";
		if ($publikovano) $sql_pocet .=" WHERE publikovano=1";
		
		$pocet = mysql_fetch_array(mysql_query($sql_pocet));
		
		return $pocet["pocet"];
	}
	
	/* Jen zjistí editovatelnost příspěvku */
	function zjistiEditovatelnostPrispevku()
	{
		if (isset($_GET["upravitClanek"]) && $_GET["upravitClanek"] == 1 && isset($_GET["id_clanku"]) && $_GET["id_clanku"] > 0)
		{
			return true;
		}
		else 
		{
			return false;
		}
	}	
	
	/* Zobrazí dialog pro napsání příspěvku */
	function formularPridatPrispevek($edit = false, $id = 0)
	{		
		/* Zjednodušené proměnné, kdo má ty šílenosti psát :-D */
		
		$tatoStranka = $_SERVER["PHP_SELF"];
		
		/* Nastavení formuláře (můžeš změnit jak uznáš za vhodné) */
		
		$nadpisTabulky 		= "Přidání příspěvku"; 	/* Upraví caption formuláře */
		$titulekFormulare		= "Titulek příspěvku";	/* Co se zobrazí u titulku článku */
		$perexFormulare		= "Perex příspěvku";		/* Co se zobrazí u perexu */
		$textFormulare			= "Text příspěvku";		/* Co se zobrazí u textu formuláře */
		$tlacitkoFormulare	= "Odeslat příspěvek";	/* Co se zobrazí na tlačítku */
		
		/* Pokud se má editovat, musíme vytáhnout hodnoty pro původní článek */
		$puvodniClanekDotaz = "SELECT titulek, perex, text FROM clanky WHERE id = $id";
		$puvodniClanek = mysql_fetch_array(mysql_query($puvodniClanekDotaz));
		
		/* Začátek formuláře */
		$formular = "<!-- Formulář na zadání příspěvku --><table><caption>$nadpisTabulky</caption><form action='$tatoStranka' method='post'>";
		
		/* Pole pro titulek */
		if ($edit)
		{
			$formular .= "<tr><td>$titulekFormulare</td><td><input type='text' name='titulek' value='".$puvodniClanek["titulek"]."'></td></tr>";
			
			/* Pole pro perex */
			$formular .= "<tr><td style='vertical-align: top;'>$perexFormulare</td><td><textarea cols='60' rows='5-' name='perex'>".$puvodniClanek["perex"]."</textarea></td></tr>";
	
			/* Pole pro text */
			$formular .= "<tr><td style='vertical-align: top;'>$textFormulare</td><td><textarea cols='60' rows='20' name='text'>".$puvodniClanek["text"]."</textarea></td></tr>";
			
			/* Potvrzovací tlačítko */
			$formular .= "<tr><td colspan=2 style='text-align: right;'><input type='hidden' name='odeslanPrispevek' value='1'><input type='hidden' name='puvodniId' value='$id'><input type='submit' value='$tlacitkoFormulare'></td></tr>";
	
			/* Konec formuláře */
			$formular .= "</form></table>";
		}
		else 
		{
			$formular .= "<tr><td>$titulekFormulare</td><td><input type='text' name='titulek'></td></tr>";
			
			/* Pole pro perex */
			$formular .= "<tr><td style='vertical-align: top;'>$perexFormulare</td><td><textarea cols='60' rows='5-' name='perex'></textarea></td></tr>";
	
			/* Pole pro text */
			$formular .= "<tr><td style='vertical-align: top;'>$textFormulare</td><td><textarea cols='60' rows='20' name='text'></textarea></td></tr>";
			
			/* Potvrzovací tlačítko */
			$formular .= "<tr><td colspan=2 style='text-align: right;'><input type='hidden' name='odeslanPrispevek' value='1'><input type='submit' value='$tlacitkoFormulare'></td></tr>";
	
			/* Konec formuláře */
			$formular .= "</form></table>";
		}
		
		/* Nakonec celý formulář vrátíme, pokud bychom ho chtěli vypsat (no aby ne, žejo...) */
		return $formular;
	}


/* -------------------------------------- */


if (!pripojitKDatabazi()) echo "Nelze se připojit k DB!";
session_start();

/* Řešení loginu */

/* Pokud se někdo pokouší odlogovat */
if (isset($_GET["logoff"]) && $_GET["logoff"] == 1)
{
	/* Odnastavení všech SESSION proměnných */
	$_SESSION["prihlasen"] = 0;
	$_SESSION["uzivatel"] = "";
	$_SESSION["id"] = "";
	$_SESSION["administrator"] = "";
	$_SESSION["upravy"] = "";
	$_SESSION["jmeno"] = "";
	$_SESSION["prijmeni"] = "";
	$_SESSION["email"] = "";
	$_SESSION["naposledyAktivni"] = "";
	
	$stav = array();
	$stav["ok"] = true;
	$stav["akce"] = "logoff";
	
}

/* Někdo si mění heslo */
if (isset($_POST["zmenaVlastnihoHesla"]) && $_POST["zmenaVlastnihoHesla"]==1)
{
	var_dump($_POST);

	/* Nejdříve kontrola vyplnění */
	if (!prazdny($_POST["puvodniHeslo"]) && !prazdny($_POST["noveHeslo"][1]) && !prazdny($_POST["noveHeslo"][2]))
	{
		/* Musíme zkontrolovat, jestli se dvě nová hesla shodují */
		if ($_POST["noveHeslo"][1] == $_POST["noveHeslo"][2])
		{
			/* Nyní zbývá než porovnat, jestli se shoduje zadane heslo s původním heslem */
			$tentoUzivatel = $_SESSION["uzivatel"];
			$puvodniHeslo = $_POST["puvodniHeslo"];
			$noveHeslo = $_POST["noveHeslo"][1];
			
			$sql_heslo = "SELECT COUNT(nick) AS pocet FROM uzivatele WHERE nick='$tentoUzivatel' AND heslo = MD5('$puvodniHeslo')";
			$heslo = mysql_fetch_array(mysql_query($sql_heslo));
			
			if ($heslo["pocet"] == 1)
			{
				/* Heslo bylo zadáno správně */
				$sql_zmenHeslo = "UPDATE uzivatele SET heslo = MD5('$noveHeslo') WHERE nick = '$tentoUzivatel'";
				
				if (mysql_query($sql_zmenHeslo))
				{
					$stav = array();
					$stav["ok"] = true;
					$stav["akce"] = "zmenaHesla";
				}
				else 
				{
					$stav = array();
					$stav["ok"] = false;
					$stav["akce"] = "zmenaHesla";
				}
			}
		}
		else
		{
			$stav = array();
			$stav["ok"] = false;
			$stav["akce"] = "heslaSeNeshoduji";
		}
	}
	else 
	{
		$stav = array();
		$stav["ok"] = false;
		$stav["akce"] = "vkladaniPrazdne";
	}
}

/* Pokud se někdo pokouší zalogovat */
if (isset ($_POST["prihlasUzivatele"]) && zkousiSeZalogovat($_POST["prihlasUzivatele"]))
{
	/* Uživatel a heslo */
	$uzivatel = $_POST["uzivatel"];
	$heslo = $_POST["heslo"];
	
	
	
	/* Potom se musí ověřit jeho jméno a heslo */
	$sql_login = "SELECT COUNT(nick) AS pocetUzivatelu FROM uzivatele WHERE nick = '$uzivatel' AND heslo = MD5('$heslo')";
	
	$login = mysql_fetch_array(mysql_query($sql_login));
	
	
	if ($login["pocetUzivatelu"] == 1)
	{
		
		/* Snaží se zalogovat a povedlo se */
		
		/* Natáhnutí dalších informací */
		$sql_prihlaseny = "SELECT uzivatele.jmeno, uzivatele.prijmeni, opravneni.administrator, opravneni.upravy, uzivatele.email, uzivatele.naposledy_aktivni, uzivatele.id FROM uzivatele, opravneni, uzivatele_opravneni WHERE nick = '$uzivatel' AND uzivatele.id = uzivatele_opravneni.uzivatele_id AND opravneni.id = uzivatele_opravneni.opravneni_id";
		
		$prihlaseny = mysql_fetch_array(mysql_query($sql_prihlaseny));   


		
		/* Nastavení proměnných */
		$_SESSION["prihlasen"] = 1;
		$_SESSION["uzivatel"] = $uzivatel;
		$_SESSION["id"] = $prihlaseny["id"];
		$_SESSION["administrator"] = $prihlaseny["administrator"];
		$_SESSION["upravy"] = $prihlaseny["upravy"];
		$_SESSION["jmeno"] = $prihlaseny["jmeno"];
		$_SESSION["prijmeni"] = $prihlaseny["prijmeni"];
		$_SESSION["email"] = $prihlaseny["email"];
		$_SESSION["naposledyAktivni"] = $prihlaseny["naposledy_aktivni"];
		
		$tutaStranka = $_SERVER["PHP_SELF"];
		
		$stav = array();
		$stav["ok"] = true;
		$stav["akce"] = "login";
		
		
		
	}
	else 
	{
		$stav = array();
		$stav["ok"] = false;
		$stav["akce"] = "login";
	}
}

/* ---------------------------------------- */
/* Řešení admin */

/* Požadavek na přidání uživatele */
if (isset($_POST["pridatUzivatele"]) && $_POST["pridatUzivatele"] == 1)
{
	/* Zkontrolovat vyplněnost polí */
	if (!prazdny($_POST["nick"]) && !prazdny($_POST["heslo"]) && !prazdny($_POST["jmeno"]) && !prazdny($_POST["prijmeni"]) && !prazdny($_POST["email"]) && ($_POST["opravneni"] > 0))
	{
		/*Kontrola validity vyplněného emailu */
		if (emailJeValidni($_POST["email"]))
		{				
			/* Pokud je vše OK */
			$sql_vlozitUzivatele = "INSERT INTO uzivatele (nick, heslo, jmeno, prijmeni, email) VALUES ('".$_POST["nick"]."', MD5('".$_POST["heslo"]."'), '".$_POST["jmeno"]."', '".$_POST["prijmeni"]."', '".$_POST["email"]."')";
			
			if (!mysql_query($sql_vlozitUzivatele))
			{
				$stav = array();
				$stav["ok"] = false;
				$stav["akce"] = "vlozitUzivatele";
			}
			else
			{
				/* Pokud se vložilo, nastavíme oprávnění */
				
				/* Zjistíme ID právě vloženého uživatele */
				$sql_id = "SELECT id FROM uzivatele WHERE nick = '".$_POST["nick"]."'";
				$id = mysql_fetch_array(mysql_query($sql_id));
				
				/* Nastavíme práva */
				$sql_prava = "INSERT INTO uzivatele_opravneni (uzivatele_id, opravneni_id) VALUES (".$id["id"].", ".$_POST["opravneni"].")";
				mysql_query($sql_prava);
				
				$stav = array();
				$stav["ok"] = true;
				$stav["akce"] = "vlozitUzivatele"; 
			}
		}		
	}
	else 
	{
		$stav = array();
		$stav["ok"] = false;
		$stav["akce"] = "vkladaniPrazdne";
	}
}

/* Požadavek na úpravu uživatele */
if (isset($_POST["upravitUzivatele"]) && $_POST["upravitUzivatele"] == 1)
{
	/* Zkontrolovat vyplněnost polí */
	if (!prazdny($_POST["nick"]) && !prazdny($_POST["jmeno"]) && !prazdny($_POST["prijmeni"]) && !prazdny($_POST["email"]) && ($_POST["opravneni"] > 0))
	{
		/* Kontrola validity mailu */
		if (emailJeValidni($_POST["email"]))
		{
			/* Pokud je vše OK */		
			$sql_upravitUzivatele = "UPDATE uzivatele SET nick='".$_POST["nick"]."', jmeno='".$_POST["jmeno"]."', prijmeni='".$_POST["prijmeni"]."', email='".$_POST["email"]."' WHERE id=".$_POST["id"];   
			
			if (!mysql_query($sql_upravitUzivatele))
			{
				$stav = array();
				$stav["ok"] = false;
				$stav["akce"] = "upravitUzivatele";			
			}
			else
			{			
				/* Pokud se vložilo, nastavíme heslo a oprávnění */
				
				if (!empty($_POST["noveHeslo"]))
				{
					
					/* Kontrola hesla, jestli sedí */				
					{
						/* Jestli sedí dvě nová hesla */
						if ($_POST["noveHeslo"] == $_POST["noveHeslo2"])
						{						
							$sql_heslo = "UPDATE uzivatele SET heslo=MD5('".$_POST["noveHeslo"]."') WHERE id=".$_POST["id"];
							if (!mysql_query($sql_heslo))
							{
								$stav = array();
								$stav["ok"] = false;
								$stav["akce"] = "upravitUzivatele";														
							}
							
						}
						else
						{
							$stav = array();
							$stav["ok"] = false;
							$stav["akce"] = "upravitUzivatele";						
						}
					}
				}
				
				/* Resetujeme práva */
				if (!isset($stav))
				{
					
					$sql_resetPrav = "DELETE FROM uzivatele_opravneni WHERE uzivatele_id = ".$_POST["id"];
					if (!mysql_query($sql_resetPrav))
					{
						$stav = array();
						$stav["ok"] = false;
						$stav["akce"] = "upravitUzivatele";
					}
					else
					{				
						$sql_prava = "INSERT INTO uzivatele_opravneni (uzivatele_id, opravneni_id) VALUES (".$_POST["id"].", ".$_POST["opravneni"].")";
						mysql_query($sql_prava);
						
						$stav = array();
						$stav["ok"] = true;
						$stav["akce"] = "upravitUzivatele"; 
					}
				}
			}
		}
				
	}
	else 
	{
		$stav = array();
		$stav["ok"] = false;
		$stav["akce"] = "vkladaniPrazdne";
	}
	
	
}

/* ---------------------------------------- */
/* Řešení příspěvků*/


/* Jen pokud je definováno id článku a současně flag, co s ním dělat */
if (isset($_GET["publikovatClanek"]) && isset($_GET["id_clanku"]))
{
	$publikovatClanek = $_GET["publikovatClanek"];
	$id_clanku = $_GET["id_clanku"];
	
	/* Pokud je uživatel admin nebo editor */
	if (jeAdmin() || jeEditor())
	{
		if ($publikovatClanek == 1)
		{
			/* Nastaví publikovat u vybraného ID */
			$publikuj = "UPDATE clanky SET publikovano = 1 WHERE id = $id_clanku";
		}
		else 
		{
			/* Nastaví skrýt u vybraného ID */
			$publikuj = "UPDATE clanky SET publikovano = 0 WHERE id = $id_clanku";
		}
		
		/* Vlastní provedení akce */
		if (mysql_query($publikuj))
		{
			$stav = array();
			$stav["ok"] = true;
			$stav["akce"] = "publikujClanek";
		}
		else 
		{
			$stav = array();
			$stav["ok"] = false;
			$stav["akce"] = "publikujClanek";
		}
	} 
}

/* Odeslání příspěvku */
if (isset($_POST["odeslanPrispevek"]) && $_POST["odeslanPrispevek"])
{
	
	/* Někdo se pokusil odeslat příspěvek */
	
	/* Můžu vůbec odeslat příspěvek? */
	
	
	if (jeAdmin() || jeEditor())
	{
		/* Může */
		
		/* Kontrola vyplněných polí */
		if (!prazdny($_POST["titulek"]) && !prazdny($_POST["perex"]) && !prazdny($_POST["text"]))
		{
			/* Můžeme vkládat */			
			$titulek = $_POST["titulek"];
			$perex = $_POST["perex"];
			$text = $_POST["text"];
			$id_uzivatele = $_SESSION["id"];
			
			
			/* Pokud upravujeme článek... */
			if (isset($_POST["puvodniId"]) && $_POST["puvodniId"] > 0)
			{
				$id_puvodniho = $_POST["puvodniId"];
				$sql_vlozit = "UPDATE clanky SET titulek = '$titulek', perex = '$perex', text = '$text' WHERE id = $id_puvodniho";				
			}
			else 
			{			
				$sql_vlozit = "INSERT INTO clanky (titulek, perex, text, vytvoreno, publikovano, uzivatele_id) VALUES ('$titulek', '$perex', '$text', NOW(), 1, $id_uzivatele)";
			}
			
			if (mysql_query($sql_vlozit))
			{
				$stav = array();
				$stav["ok"] = true;
				$stav["akce"] = "vlozeniPrispevku";
			}
			else 
			{
				$stav = array();
				$stav["ok"] = false;
				$stav["akce"] = "vlozeniPrispevku";
			}
		}
		else 
		{
			$stav = array();
			$stav["ok"] = false;
			$stav["akce"] = "vkladaniPrazdne";
		}
	}
	else 
	{
		/* Nemůžu */
		$stav = $array();
		$stav["ok"] = false;
		$stav["akce"] = "autorizace";
	}
}

/* Smazání uživatele */
if (jeAdmin() && isset($_GET["smazatUzivatele"]))
{
	$id = $_GET["smazatUzivatele"];
	
	$sql_smazatUzivatele = "UPDATE uzivatele SET smazany = 1 WHERE id=$id";
	
	if (mysql_query($sql_smazatUzivatele))
	{
		$stav = array();
		$stav["ok"] = true;
		$stav["akce"] = "smazatUzivatele";
	}
	else
	{
		$stav = array();
		$stav["ok"] = false;
		$stav["akce"] = "smazatUzivatele";
	}
}




?>